/*************************************************************************
  > File Name: 2.daemon_two.c
  > Author: Ykk
  > Mail: 3393579535@qq.com 
  > Created Time: 2023年05月07日 星期日 21时22分25秒
 ************************************************************************/

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>

#include<time.h>

#define SIZE 256

//创建守护进程
int main()
{
	int ret = -1;
	pid_t pid = -1;

	time_t t; 
	struct tm *pT = NULL;

	char file_name[SIZE];

	//1.创建子进程，父进程退出
	pid = fork();
	if(-1 == pid)
	{
		perror("fork");
		return 1;
	}
	if(pid > 0)
	{
		exit(0);//父进程退出
	}
	//2.创建新的会话
	pid = setsid();
	if(-1 == pid)
	{
		perror("setsid");
		return 1;
	}
	//3.改变当前工作目录(chair)
	ret = chdir("/home/ykk/learn/3.Processes/4.Process_groups_and_daemons/3.text/");
	if(-1 == ret)
	{
		perror("chdir");
		return 1; 
	}
	//4.设置权限掩码
	umask(0);
	//5.关闭文件描述符
	close(STDIN_FILENO);
	close(STDOUT_FILENO);
	close(STDERR_FILENO);
	//6.执行核心的任务
	//每隔一秒钟输出当前时间到
	while(1)
	{
		//获取当前时间 以秒为单位 从1970-01-01 00:00:00 开始到现在秒数
		t = time(NULL);				
		//转化为时间
		pT = localtime(&t);
		if(NULL == pT)
		{
			printf("localtime failed...\n");
			return 1;
		}
		//转化为文件名
		memset(file_name,0,SIZE);
		sprintf(file_name,"%s%d,%d,%d,%d,%d,%d.log","touch /home/ykk/learn/3.Processes/4.Process_groups_and_daemons/3.text/",pT->tm_year + 1900,pT->tm_mon + 1,pT->tm_mday,pT->tm_hour,pT->tm_min,pT->tm_sec);

		system(file_name);
		sleep(1);
	}
	return 0;
}
